using Server.Items;
using Server.Targeting;

namespace Server.ContextMenus
{
    public class AddToSpellbookEntry : ContextMenuEntry
    {
        public AddToSpellbookEntry() : base(6144, 3)
        {
        }

        public override void OnClick(Mobile from, IEntity target)
        {
            if (from.CheckAlive() && target is SpellScroll scroll)
            {
                from.Target = new InternalTarget(scroll);
            }
        }

        private class InternalTarget : Target
        {
            private readonly SpellScroll m_Scroll;

            public InternalTarget(SpellScroll scroll) : base(3, false, TargetFlags.None) => m_Scroll = scroll;

            protected override void OnTarget(Mobile from, object targeted)
            {
                if (targeted is Spellbook book)
                {
                    if (from.CheckAlive() && !m_Scroll.Deleted && m_Scroll.Movable && m_Scroll.Amount >= 1 &&
                        m_Scroll.CheckItemUse(from))
                    {
                        var type = Spellbook.GetTypeForSpell(m_Scroll.SpellID);

                        if (type != book.SpellbookType)
                        {
                        }
                        else if (book.HasSpell(m_Scroll.SpellID))
                        {
                            from.SendLocalizedMessage(500179); // That spell is already present in that spellbook.
                        }
                        else
                        {
                            var val = m_Scroll.SpellID - book.BookOffset;

                            if (val >= 0 && val < book.BookCount)
                            {
                                book.Content |= (ulong)1 << val;

                                m_Scroll.Consume();
                                from.SendSound(0x249, book.GetWorldLocation());
                            }
                        }
                    }
                }
            }
        }
    }
}
